package br.com.sistema.util;

import java.util.Date;
import java.util.List;

import br.com.sistema.control.ClienteRN;
import br.com.sistema.control.ProdutoRN;
import br.com.sistema.control.UsuarioRN;
import br.com.sistema.control.VendaRN;
import br.com.sistema.entidade.Cliente;
import br.com.sistema.entidade.Produto;
import br.com.sistema.entidade.Usuario;
import br.com.sistema.entidade.Venda;

public class Fachada {
	
	public static Fachada fachada = getInstancia();
	
	private ClienteRN clienteRN = new ClienteRN();
	private ProdutoRN produtoRN = new ProdutoRN();
	private VendaRN vendaRN = new VendaRN();
	private UsuarioRN usuarioRN = new UsuarioRN();
		
	public static Fachada getInstancia() {
		if(fachada == null){
			fachada = new Fachada();
		}
		return fachada;
	}
	
	/*Modulo de Clientes*/
	public boolean salvarCliente(Cliente cliente){
		return this.clienteRN.salvar(cliente);
	}
	
	public List<Cliente> listarCliente(){
		return this.clienteRN.listar();
	}
	
	public void removerCliente(Integer id){
		this.clienteRN.remover(id);
	}
	
	public Cliente PesquisarClientePorCodigo(Integer codigo){
		return this.clienteRN.pesquisarPorCodigo(codigo);
	}
	
	/*Modulo de Produtos*/
	public boolean salvarProduto(Produto produto){
		return this.produtoRN.salvar(produto);
	}
	
	public void removerProduto(Integer id){
		this.produtoRN.remover(id);
	}
	
	public Produto pesquisarProdutoPorNome(String descricao){
		return this.produtoRN.pesquisarPorNome(descricao);
	}
	
	public Produto pesquisarProdutoPorCodigo(Integer id){
		return this.produtoRN.pesquisarPorCodigo(id);
	}
	
	public List<Produto> listarProduto(){
		return this.produtoRN.listar();
	}
	
	public List<Produto> listarProdutosMaisVendidos(){
		return this.produtoRN.listarProdutosMaisVendidos();
	}
	
	/*Modulo de Vendas*/
	public void salvarVenda(Venda venda){
		this.vendaRN.salvar(venda);
	}
	
	public List<Venda> listarVenda(){
		return this.vendaRN.listar();
	}
	
	public void removerVenda(Integer id){
		this.vendaRN.remover(id);
	}
	
	public Double calcularTotal(List<Produto> listaProduto){
		return this.vendaRN.calcularTotal(listaProduto);
	}
	
	public Double calcularTotalVenda(List<Venda> listaVenda){
		return this.vendaRN.calcularTotalVenda(listaVenda);
	}
	
	public Produto buscarProdutoVenda(Produto produto){
		return this.vendaRN.buscarProdutoVenda(produto);
	}
	
	public void cancelarVenda(Venda venda){
		this.vendaRN.cancelarVenda(venda);
	}
	
	public List<Venda> buscarPorID(Integer id){
		return (List<Venda>) this.vendaRN.buscarPorID(id);
	}
	
	/*Modulo de usurio */
	
	public boolean login(String login, String senha){
		return this.usuarioRN.login(login, senha);
	}
	
	public void logoff(){
		this.usuarioRN.logoff();
	}
	
	public Usuario recuperarUsuarioDaSessao(){
		return this.usuarioRN.recuperarUsuarioDaSessao();
	}

	public List<Venda> buscarVendas(Date dataInicial, Date dataFinal, String flagStatusVenda) {
		return this.vendaRN.buscarVendas(dataInicial,dataFinal, flagStatusVenda);
		
	}
}
